package cn.biplam.back.bean.tree;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Map;

import cn.biplam.common.bean.tree.TreeParentTableExt;
import cn.biplam.common.client.DbResource;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.KvMap;

/**
 *  父子关系树扩展操作
 * @author XiaoRuxing Dec 15, 20097:26:37 PM
 * @version 1.0
 */
public class TreeParentTableExtImp extends TreeParentTableExt implements Serializable{

	/**  */
	private static final long serialVersionUID = 1120391204L;
	
	/** 表名 */
	private String tableName;
	/** 主键字段名 */
	private String keyField;
	/** 父亲字段名称 */
	private String parentField;

	public TreeParentTableExtImp(DbResource dbResource,String tableName,String keyField,String parentField){
		this.dbResource = dbResource;
		this.tableName = tableName;
		this.keyField = keyField;
		this.parentField = parentField;
	}

	/**
	 *  获取下级节点列表<BR>可用于sql in子句的列表('a','b')
	 * @param startId 起始节点ID
	 * @param dbResource 数据源(可以为空,如果为空连接到默认数据源)
	 * @param filterValues 字符类型过滤条件 (Key:字段名;Value:字段值)
	 * @return 返回下级节点的列表(逗号分隔)<BR>
	 * @throws ErrorMessage
	 */
	@Override
	public String getChildrenList(String startId,
			KvMap<String, String> filterValues) throws ErrorMessage {
		if(dbResource == null)dbResource = new DbResource();
		FindChildren find = new FindChildren(dbResource,
				tableName,
				keyField,
				parentField,
				startId);
		//设置过滤条件
		if(filterValues!=null){
			for(Map.Entry<String, String> filter: filterValues){
				find.putFilter(filter.getKey(), filter.getValue());
			}
		}
		//返回下级列表
		find.start();
		return find.getSqlList();
	}


	/**
	 *  获取下级节点列表<BR>
	 * @param startId 起始节点ID
	 * @param dbResource 数据源(可以为空,如果为空连接到默认数据源)
	 * @param filterValues 字符类型过滤条件 (Key:字段名;Value:字段值)
	 * @return  返回下级节点的列表
	 */
	@Override
	public ArrayList<String> getChilds(String startId,
			KvMap<String, String> filterValues) throws ErrorMessage {
		if(dbResource == null)dbResource = new DbResource();
		FindChildren find = new FindChildren(dbResource,
				tableName,
				keyField,
				parentField,
				startId);
		//设置过滤条件
		if(filterValues!=null){
			for(Map.Entry<String, String> filter: filterValues){
				find.putFilter(filter.getKey(), filter.getValue());
			}
		}
		//返回下级列表
		find.start();
		return find.getNodeList();
	}
	
}
